package com.ljx.thread.pollThread07;

import java.util.concurrent.*;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/11/2 16:28
 * @Version 1.0
 */
public class CallableThreadTest {
	public static void main(String[] args) throws ExecutionException, InterruptedException {
	/*	// 船舰一个Callable类型的任务对象
		CallableThread callableThread = new CallableThread();
		// 把任务对象封装到FutureTask对象中，再交给Thread
		// 而且任务的返回结果也封装发哦了FutrueTask对象中
		FutureTask task = new FutureTask(callableThread);
		Thread thread = new Thread(task);
		thread.start();
		System.out.println(task.get());*/

		/**
		 * 上面这种通过Callable实现线程的方式，在执行线程任务时，比较麻烦。
		 * 既然是任务，那么我们就可以使用线程池来为该任务分配线程对象，并通过该线程对象来执行任务。
		 */

		ExecutorService executorService = Executors.newFixedThreadPool(2);
		Future<Integer> future = executorService.submit(new CallableThread());
		executorService.shutdown();
		System.out.println(future.get());

	}
}
/**
 * 第三种创建线程方法，实现Callable接口 并重写call方法，
 * call方法有返回值。而且该方法有一场抛出
  */
class CallableThread implements Callable<Integer>{
	int sum=0;
	@Override
	public Integer call() throws Exception {
		for (int i = 0; i <= 100; i++) {
			sum+=i;
		}
		return sum;
	}
}